package com.wilhelmer.backedbeans.abteilungverwaltung.schlosserei;

import java.util.Date;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.wilhelmer.backedbeans.abstractbeans.AbstractDatabaseModel;
import com.wilhelmer.backedbeans.bauteilverwaltung.Baustelle;


public class DatabaseModelSchlosserei extends AbstractDatabaseModel {
	
	public List<Uebersicht>selectListUebersicht(int listenmodus) {
		List<Uebersicht> listUebersicht = new ArrayList<Uebersicht>();
	
		String sql = "Select * from Schlosserei s, Baustelle b, TPPos t, verzinker v, beschichter besch " +
				"Where b.aid = t.Baustelle_aid and t.Schlosserei_sid = s.sid " +
				"and s.Verzinker_vid = v.vid and s.Beschichter_bid = besch.bid " +
				"and schlosserei = 1 ";
		String einschraenkungListe = "";
		
		switch (listenmodus) {
		case 0:
			//Noch nicht produziert
			einschraenkungListe = "and inProduktion is null";
			break;
		
		case 1:
			//in Produktion
			einschraenkungListe = "and inProduktion is not null and bereitSchlosserei is null";
			break;
			
		case 2:
			//fertig Produziert
			einschraenkungListe ="and bereitSchlosserei is not null and ehIst = 0.0";
			break;
			
		case 3:
			//nachkalkulation: evtl ohne bereitSchlosserei
			einschraenkungListe="and ehIst > 0.0 and bereitSchlosserei is not null";
			break;

		default:
			break;
		}
		
		sql = sql + einschraenkungListe;
		
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				String kommisionsnummer = rs.getString("kommisionsnummer");
				String bauvorhaben = rs.getString("bauvorhaben");
				int baustelleAid = rs.getInt("Baustelle_aid");
				int technikTid = rs.getInt("Technik_tid");
				int verladeortVerlortID = rs.getInt("Verladeort_verlortID");
				int niroNid = rs.getInt("Niro_nid");
				int schlossereiSid = rs.getInt("Schlosserei_sid");
				int aluAid = rs.getInt("Alu_aid");
				int tpposID = rs.getInt("tpposID");
				String tpposName = rs.getString("tpposName");
				Date bereitMontage = rs.getDate("bereitMontage");
				Date verladetermin = rs.getDate("verladetermin");
				int schlosserei = rs.getInt("schlosserei");
				int niro = rs.getInt("niro");
				int alu = rs.getInt("alu");  
				Date beginnSchlosserei = rs.getDate("beginnSchlosserei");
				Date matImHaus = rs.getDate("matImHaus");
				double ehSoll = rs.getDouble("ehSoll");
				double ehIst = rs.getInt("ehIst");
				int verzinkenBit = rs.getInt("verzinken");
				Date verzinkenAb = rs.getDate("verzinkenAb");
				Date verzinkenRetour = rs.getDate("verzinkenRetour");
				Date verzinkenGeputzt = rs.getDate("verzinkenGeputzt");
				int beschichtenBit = rs.getInt("beschichten");
				Date beschichtenAb = rs.getDate("beschichtenAb");
				Date beschichtenRetour = rs.getDate("beschichtenRetour");
				Date bereitSchlosserei = rs.getDate("bereitSchlosserei");
				Date geplanteFertigstellung = rs.getDate("geplanteFertigstellung");
				String verzinkerName = rs.getString("verzinkername");
				String beschichterName = rs.getString("beschichtername");
				Date inProduktion = rs.getDate("inProduktion");
				
				
				listUebersicht
						.add(new Uebersicht(kommisionsnummer, bauvorhaben,
								baustelleAid, technikTid, verladeortVerlortID,
								niroNid, schlossereiSid, aluAid, tpposID,
								tpposName, bereitMontage, verladetermin,
								schlosserei, niro, alu, beginnSchlosserei,
								matImHaus, ehSoll, ehIst, verzinkenBit,
								verzinkenAb, verzinkenRetour, verzinkenGeputzt,
								beschichtenBit, beschichtenAb,
								beschichtenRetour, bereitSchlosserei,
								geplanteFertigstellung, verzinkerName,
								beschichterName, inProduktion));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return listUebersicht;	
	}
	
	
	
	
	public List<TerminplanpositionSchlosserei> selectListTpposZuBaustellen(int aid) {
		List<TerminplanpositionSchlosserei> listTpposZuBauteilen = new ArrayList<TerminplanpositionSchlosserei>();
		
		String sql = "Select * from Baustelle b, TPPos t " +
				"Where b.aid = t.Baustelle_aid and schlosserei = 1 and b.aid="+aid;
		
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				int baustelleAid = rs.getInt("Baustelle_aid");
				int technikTid = rs.getInt("Technik_tid");
				int verladeortVerlortID = rs.getInt("Verladeort_verlortID");
				int niroNid = rs.getInt("Niro_nid");
				int schlossereiSid = rs.getInt("Schlosserei_sid");
				int aluAid = rs.getInt("Alu_aid");
				int tpposID = rs.getInt("tpposID");
				String tpposName = rs.getString("tpposName");
				Date bereitMontage = rs.getDate("bereitMontage");
				Date verladetermin = rs.getDate("verladetermin");
				int schlosserei = rs.getInt("schlosserei");
				int niro = rs.getInt("niro");
				int alu = rs.getInt("alu");  
				Date beginnSchlosserei = rs.getDate("beginnSchlosserei");
				Date matImHaus = rs.getDate("matImHaus");
				double ehSoll = rs.getDouble("ehSoll");
				double ehIst = rs.getInt("ehIst");
				int verzinkenBit = rs.getInt("verzinkenBit");
				Date verzinkenAb = rs.getDate("verzinkenAb");
				Date verzinkenRetour = rs.getDate("verzinkenRetour");
				Date verzinkenGeputzt = rs.getDate("verzinkenGeputzt");
				int beschichtenBit = rs.getInt("beschichtenBit");
				Date beschichtenAb = rs.getDate("beschichtenAb");
				Date beschichtenRetour = rs.getDate("beschichtenRetour");
				Date bereitSchlosserei = rs.getDate("bereitSchlosserei");
				Date geplanteFertigstellung = rs.getDate("geplanteFertigstellung");
				int vid = rs.getInt("Verzinken_vid");
				int bid = rs.getInt("Verzinken_bid");
				
				listTpposZuBauteilen.add(new TerminplanpositionSchlosserei(
						baustelleAid, technikTid, verladeortVerlortID, niroNid,
						schlossereiSid, aluAid, tpposID, tpposName,
						bereitMontage, verladetermin, schlosserei, niro, alu,
						beginnSchlosserei, matImHaus, ehSoll, ehIst,
						verzinkenBit, verzinkenAb, verzinkenRetour,
						verzinkenGeputzt, beschichtenBit, beschichtenAb,
						beschichtenRetour, bereitSchlosserei,
						geplanteFertigstellung, vid, bid));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return listTpposZuBauteilen;
	}
	
	
	public List<Baustelle> selectListBaustelleFuerUebersicht(int listenmodus) {
		String sql = "Select distinct kommisionsnummer, bauvorhaben from Baustelle b, TPPos t " +
				"Where b.aid = t.Baustelle_aid and schlosserei = 1";
		
		List<Baustelle> listBaustelle = new ArrayList<Baustelle>();
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				String kommisionsnummer = rs.getString("kommisionsnummer");
				String bauvorhaben = rs.getString("bauvorhaben");
				listBaustelle.add(new Baustelle(kommisionsnummer, bauvorhaben));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return listBaustelle;
	}
	
	public List<TerminplanpositionSchlosserei> selectListTppSchlossereiFuerUebersicht(int listenmodus) {
		String sql = "Select * from Baustelle b, TPPos t " +
				"Where b.aid = t.Baustelle_aid and schlosserei = 1";
		
		List<TerminplanpositionSchlosserei> listTpposSchlosserei = new ArrayList<TerminplanpositionSchlosserei>();
		
		try {
			stmt = con.createStatement();
			rs=stmt.executeQuery(sql);
			
			while(rs.next()) {
				int baustelleAid = rs.getInt("Baustelle_aid");
				int technikTid = rs.getInt("Technik_tid");
				int verladeortVerlortID = rs.getInt("Verladeort_verlortID");
				int niroNid = rs.getInt("Niro_nid");
				int schlossereiSid = rs.getInt("Schlosserei_sid");
				int aluAid = rs.getInt("Alu_aid");
				int tpposID = rs.getInt("tpposID");
				String tpposName = rs.getString("tpposName");
				Date bereitMontage = rs.getDate("bereitMontage");
				Date verladetermin = rs.getDate("verladetermin");
				int schlosserei = rs.getInt("schlosserei");
				int niro = rs.getInt("niro");
				int alu = rs.getInt("alu");  
				Date beginnSchlosserei = rs.getDate("beginnSchlosserei");
				Date matImHaus = rs.getDate("matImHaus");
				double ehSoll = rs.getDouble("ehSoll");
				double ehIst = rs.getInt("ehIst");
				int verzinkenBit = rs.getInt("verzinkenBit");
				Date verzinkenAb = rs.getDate("verzinkenAb");
				Date verzinkenRetour = rs.getDate("verzinkenRetour");
				Date verzinkenGeputzt = rs.getDate("verzinkenGeputzt");
				int beschichtenBit = rs.getInt("beschichtenBit");
				Date beschichtenAb = rs.getDate("beschichtenAb");
				Date beschichtenRetour = rs.getDate("beschichtenRetour");
				Date bereitSchlosserei = rs.getDate("bereitSchlosserei");
				Date geplanteFertigstellung = rs.getDate("geplanteFertigstellung");
				int vid = rs.getInt("Verzinken_vid");
				int bid = rs.getInt("Verzinken_bid");
				
				listTpposSchlosserei.add(new TerminplanpositionSchlosserei(
						baustelleAid, technikTid, verladeortVerlortID, niroNid,
						schlossereiSid, aluAid, tpposID, tpposName,
						bereitMontage, verladetermin, schlosserei, niro, alu,
						beginnSchlosserei, matImHaus, ehSoll, ehIst,
						verzinkenBit, verzinkenAb, verzinkenRetour,
						verzinkenGeputzt, beschichtenBit, beschichtenAb,
						beschichtenRetour, bereitSchlosserei,
						geplanteFertigstellung, vid, bid));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return listTpposSchlosserei;	
	}
}
